package com.bckj.fastboot.core.extra.stage;

/**
 * 业务逻辑阶段接口（核心抽象）
 * @param <C> 阶段上下文类型（建议继承 BaseStageContext）
 */
public interface Stage<C extends BaseStageContext> {

    /**
     * 阶段唯一标识（用于流程编排时定位阶段）
     * @return 阶段ID（如 "order.create.validate"）
     */
    String getStageId();

    /**
     * 阶段执行入口（核心方法）
     * @param context 阶段上下文（包含输入/输出/共享数据）
     * @throws StageException 阶段执行异常（可自定义异常类型）
     */
    void execute(C context) throws StageException;

    /**
     * 阶段回滚处理（可选覆盖）
     * @param context 上下文
     * @param error 阶段执行异常
     */
    default void rollback(C context, Throwable error) {
        // 默认空实现（可用于回滚操作、日志记录、资源释放等）
    }

    /**
     * 阶段回调处理（可选覆盖）
     * @param context 上下文（包含阶段执行结果）
     */
    default void callback(C context) {
        // 默认空实现（可用于回调操作、日志记录、资源释放等）
    }

    /**
     * 阶段是否可跳过（可选覆盖）
     * @param context 上下文（根据上下文动态判断）
     * @return true=跳过当前阶段
     */
    default boolean skip(C context) {
        return false; // 默认不跳过
    }
}